//函数作为一个返回值

function create() {
    let i = 200; //访问的外部函数
    return function() {
        console.log(i);
    }
}

let fn = create();
let i = 100;
fn(); //200 访问的是外部函数的变量,create返回了一个外部函数变量值

//函数作为参数,对比于回调函数
function print(fn) {
    let a = 200;
    fn();
}
let a = 100;

function fn2() {
    console.log(a);
}

print(fn2) //100
    //自由变量的查找,是在函数定义的地方,向上级作用域查找,而不是在执行的地方